package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 1、打印九九乘法表。如果可以要求间隔均匀
	// j=1 i=1 j*i=1*1=1
	// j=1 i=2 j*i=1*2=2 j=2 i=2 j*i=2*2=4
	// ......
	// j=1 i=9 j*i=1*9=9 j=2 i=9 j*i=2*9=18 j=3 i=9 j*i=3*9=27  ...... j=9 i=9 j*i=9*9=81
	fmt.Println("=======================九九乘法表=====================")
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d*%d=%-2d ", j, i, j*i)
		}
		fmt.Println()
	}
	fmt.Println("=======================随机数=====================")
	// src := rand.NewSource(10)
	// r10 := rand.New(src)
	// r1 := rand.New(rand.NewSource(1))
	// for i := 0; i < 10; i++ {
	// 	fmt.Printf("%d, %d, %d\n", rand.Intn(5), r1.Intn(5), r10.Intn(5))
	// }
	// 2、随机生成20以内的20个非0正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，
	// 第偶数个累乘求积。打印结果
	a := rand.New(rand.NewSource(time.Now().UnixNano()))
	product := 1
	sum := 0
	for i := 1; i <= 20; i++ {
		s := a.Intn(19) + 1
		fmt.Printf("第%d个随机数是%d\n", i, s)
		if i%2 == 1 {
			// 说明是第奇数个随机数
			sum = sum + s
		} else {
			product = product * s
		}
	}
	fmt.Println("第单数个累加求和是", sum)
	fmt.Println("第偶数个累乘求积是", product)
	fmt.Println("=======================斐波那契数列=====================")
	// 3、打印100以内的斐波那契数列
	// 斐波那契数列 1,1,2,3,5,8,13,......
	// f(n) = f(n-1) + f(n-2)
	// 当前斐波那契数i,上个斐波那契数j
	i, j := 1, 0
	fmt.Println(i)
	for {
		i, j = i+j, i
		if i >= 100 {
			break
		}
		fmt.Println(i)
	}
}
